/usr/share/doc/haskell-haskelldb-doc/html/src/Database-HaskellDB.html is in libghc-haskelldb-doc 2.1.1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Database/HaskellDB.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE FlexibleInstances #-}</span>
<a name="line-2"></a><span class='hs-comment'>-----------------------------------------------------------</span>
<a name="line-3"></a><span class='hs-comment'>-- |</span>
<a name="line-4"></a><span class='hs-comment'>-- Module : HaskellDB</span>
<a name="line-5"></a><span class='hs-comment'>-- Copyright : Daan Leijen (c) 1999, daan@cs.uu.nl</span>
<a name="line-6"></a><span class='hs-comment'>-- HWT Group (c) 2003, haskelldb-users@lists.sourceforge.net</span>
<a name="line-7"></a><span class='hs-comment'>-- License : BSD-style</span>
<a name="line-8"></a><span class='hs-comment'>-- </span>
<a name="line-9"></a><span class='hs-comment'>-- Maintainer : "Justin Bailey" <jgbailey@gmail.com></span>
<a name="line-10"></a><span class='hs-comment'>-- Stability : experimental</span>
<a name="line-11"></a><span class='hs-comment'>-- Portability : non portable</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- HaskellDB is a Haskell library for expressing database queries and</span>
<a name="line-14"></a><span class='hs-comment'>-- operations in a type safe and declarative way. HaskellDB compiles a</span>
<a name="line-15"></a><span class='hs-comment'>-- relational algebra-like syntax into SQL, submits the operations to the</span>
<a name="line-16"></a><span class='hs-comment'>-- database for processing, and returns the results as ordinary Haskell</span>
<a name="line-17"></a><span class='hs-comment'>-- values.</span>
<a name="line-18"></a><span class='hs-comment'>--</span>
<a name="line-19"></a><span class='hs-comment'>-- This is the main module that the user should </span>
<a name="line-20"></a><span class='hs-comment'>-- import. Beside this module, the user should import a</span>
<a name="line-21"></a><span class='hs-comment'>-- particular database binding (ie. "Database.HaskellDB.HSQL.ODBC") </span>
<a name="line-22"></a><span class='hs-comment'>-- and database definitions.</span>
<a name="line-23"></a><span class='hs-comment'>--</span>
<a name="line-24"></a><span class='hs-comment'>-- HaskellDB was originally written by Daan Leijen and it's </span>
<a name="line-25"></a><span class='hs-comment'>-- design is described in the paper Domain Specific Embedded </span>
<a name="line-26"></a><span class='hs-comment'>-- Compilers, Daan Leijen and Erik Meijer. 2nd USENIX </span>
<a name="line-27"></a><span class='hs-comment'>-- Conference on Domain-Specific Languages (DSL), Austin, </span>
<a name="line-28"></a><span class='hs-comment'>-- USA, October 1999 (<<a href="http://www.usenix.org/events/dsl99/">http://www.usenix.org/events/dsl99/</a>>).</span>
<a name="line-29"></a><span class='hs-comment'>--</span>
<a name="line-30"></a><span class='hs-comment'>-- This new version of HaskellDB was produced as a student project at</span>
<a name="line-31"></a><span class='hs-comment'>-- Chalmers University of Technology in Gothenburg, Sweden. The aim of the</span>
<a name="line-32"></a><span class='hs-comment'>-- project was to make HaskellDB a practically useful database library.</span>
<a name="line-33"></a><span class='hs-comment'>-- That work is described in </span>
<a name="line-34"></a><span class='hs-comment'>-- Student Paper: HaskellDB Improved, </span>
<a name="line-35"></a><span class='hs-comment'>-- Björn Bringert, Anders Höckersten, Conny Andersson, Martin Andersson, </span>
<a name="line-36"></a><span class='hs-comment'>-- Mary Bergman, Victor Blomqvist and Torbjörn Martin. </span>
<a name="line-37"></a><span class='hs-comment'>-- In Proceedings of the ACM SIGPLAN 2004 Haskell Workshop, Snowbird, Utah, </span>
<a name="line-38"></a><span class='hs-comment'>-- USA, September 22, 2004.</span>
<a name="line-39"></a><span class='hs-comment'>-- (<<a href="http://haskelldb.sourceforge.net/haskelldb.pdf">http://haskelldb.sourceforge.net/haskelldb.pdf</a>>)</span>
<a name="line-40"></a><span class='hs-comment'>--</span>
<a name="line-41"></a><span class='hs-comment'>-----------------------------------------------------------</span>
<a name="line-42"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span>
<a name="line-43"></a> <span class='hs-layout'>(</span> <span class='hs-conid'>Rel</span><span class='hs-layout'>,</span> <span class='hs-conid'>Attr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Expr</span><span class='hs-layout'>,</span> <span class='hs-conid'>ExprAggr</span><span class='hs-layout'>,</span> <span class='hs-conid'>Table</span><span class='hs-layout'>,</span> <span class='hs-conid'>Query</span><span class='hs-layout'>,</span> <span class='hs-conid'>OrderExpr</span>
<a name="line-44"></a> <span class='hs-comment'>-- * Records</span>
<a name="line-45"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>HasField</span><span class='hs-layout'>,</span> <span class='hs-conid'>Record</span><span class='hs-layout'>,</span> <span class='hs-conid'>Select</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span> <span class='hs-cpp'>#</span> <span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span> <span class='hs-varop'><<</span> <span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'><<-</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>!</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>!.</span><span class='hs-layout'>)</span>
<a name="line-46"></a>
<a name="line-47"></a> <span class='hs-comment'>-- * Relational operators</span>
<a name="line-48"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>restrict</span><span class='hs-layout'>,</span> <span class='hs-varid'>table</span><span class='hs-layout'>,</span> <span class='hs-varid'>project</span><span class='hs-layout'>,</span> <span class='hs-varid'>unique</span>
<a name="line-49"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>union</span><span class='hs-layout'>,</span> <span class='hs-varid'>intersect</span><span class='hs-layout'>,</span> <span class='hs-varid'>divide</span><span class='hs-layout'>,</span> <span class='hs-varid'>minus</span>
<a name="line-50"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>copy</span><span class='hs-layout'>,</span> <span class='hs-varid'>copyAll</span><span class='hs-layout'>,</span> <span class='hs-varid'>subQuery</span>
<a name="line-51"></a>
<a name="line-52"></a> <span class='hs-comment'>-- * Query expressions</span>
<a name="line-53"></a> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.==.</span><span class='hs-layout'>)</span> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.<>.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.<.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.<=.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.>.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.>=.</span><span class='hs-layout'>)</span>
<a name="line-54"></a> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.&&.</span><span class='hs-layout'>)</span> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.||.</span><span class='hs-layout'>)</span>
<a name="line-55"></a> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.*.</span><span class='hs-layout'>)</span> <span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>./.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.+.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.-.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.%.</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>.++.</span><span class='hs-layout'>)</span>
<a name="line-56"></a> <span class='hs-layout'>,</span> <span class='hs-sel'>_not</span><span class='hs-layout'>,</span> <span class='hs-varid'>like</span><span class='hs-layout'>,</span> <span class='hs-sel'>_in</span><span class='hs-layout'>,</span> <span class='hs-varid'>cat</span><span class='hs-layout'>,</span> <span class='hs-sel'>_length</span>
<a name="line-57"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>isNull</span><span class='hs-layout'>,</span> <span class='hs-varid'>notNull</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromNull</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromVal</span>
<a name="line-58"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>constant</span><span class='hs-layout'>,</span> <span class='hs-varid'>constVal</span><span class='hs-layout'>,</span> <span class='hs-varid'>constNull</span><span class='hs-layout'>,</span> <span class='hs-varid'>constExpr</span>
<a name="line-59"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>param</span><span class='hs-layout'>,</span> <span class='hs-varid'>namedParam</span><span class='hs-layout'>,</span> <span class='hs-conid'>Args</span><span class='hs-layout'>,</span> <span class='hs-varid'>func</span>
<a name="line-60"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>queryParams</span><span class='hs-layout'>,</span> <span class='hs-conid'>Param</span><span class='hs-layout'>,</span> <span class='hs-varid'>cast</span><span class='hs-layout'>,</span> <span class='hs-varid'>coerce</span>
<a name="line-61"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>literal</span><span class='hs-layout'>,</span> <span class='hs-varid'>toStr</span>
<a name="line-62"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>count</span><span class='hs-layout'>,</span> <span class='hs-sel'>_sum</span><span class='hs-layout'>,</span> <span class='hs-sel'>_max</span><span class='hs-layout'>,</span> <span class='hs-sel'>_min</span><span class='hs-layout'>,</span> <span class='hs-varid'>avg</span>
<a name="line-63"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>stddev</span><span class='hs-layout'>,</span> <span class='hs-varid'>stddevP</span><span class='hs-layout'>,</span> <span class='hs-varid'>variance</span><span class='hs-layout'>,</span> <span class='hs-varid'>varianceP</span>
<a name="line-64"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>asc</span><span class='hs-layout'>,</span> <span class='hs-varid'>desc</span><span class='hs-layout'>,</span> <span class='hs-varid'>order</span>
<a name="line-65"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>top</span> <span class='hs-layout'>,</span> <span class='hs-sel'>_case</span> <span class='hs-layout'>,</span> <span class='hs-sel'>_default</span>
<a name="line-66"></a>
<a name="line-67"></a> <span class='hs-comment'>-- * Database operations</span>
<a name="line-68"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>Database</span> <span class='hs-comment'>-- abstract</span>
<a name="line-69"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>query</span><span class='hs-layout'>,</span> <span class='hs-varid'>recCat</span>
<a name="line-70"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>insert</span><span class='hs-layout'>,</span> <span class='hs-varid'>delete</span><span class='hs-layout'>,</span> <span class='hs-varid'>update</span><span class='hs-layout'>,</span> <span class='hs-varid'>insertQuery</span>
<a name="line-71"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>tables</span><span class='hs-layout'>,</span> <span class='hs-varid'>describe</span><span class='hs-layout'>,</span> <span class='hs-varid'>transaction</span>
<a name="line-72"></a>
<a name="line-73"></a> <span class='hs-comment'>-- * Debugging</span>
<a name="line-74"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>showQuery</span><span class='hs-layout'>,</span> <span class='hs-varid'>showQueryUnOpt</span><span class='hs-layout'>,</span> <span class='hs-varid'>showSql</span><span class='hs-layout'>,</span> <span class='hs-varid'>showSqlUnOpt</span>
<a name="line-75"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-76"></a>
<a name="line-77"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>HDBRec</span>
<a name="line-78"></a>
<a name="line-79"></a><span class='hs-comment'>-- PrimQuery type is imported so that haddock can find it.</span>
<a name="line-80"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>PrimQuery</span> <span class='hs-layout'>(</span><span class='hs-conid'>PrimQuery</span><span class='hs-layout'>)</span>
<a name="line-81"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Sql</span> <span class='hs-layout'>(</span><span class='hs-conid'>SqlSelect</span><span class='hs-layout'>(</span><span class='hs-conid'>SqlSelect</span><span class='hs-layout'>,</span> <span class='hs-conid'>SqlBin</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>SqlExpr</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>SqlName</span><span class='hs-layout'>)</span>
<a name="line-82"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Sql</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>S</span> <span class='hs-layout'>(</span><span class='hs-conid'>SqlSelect</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Mark</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-83"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Sql</span><span class='hs-varop'>.</span><span class='hs-conid'>Generate</span> <span class='hs-layout'>(</span><span class='hs-varid'>sqlQuery</span><span class='hs-layout'>)</span>
<a name="line-84"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Sql</span><span class='hs-varop'>.</span><span class='hs-conid'>Default</span> <span class='hs-layout'>(</span><span class='hs-varid'>defaultSqlGenerator</span><span class='hs-layout'>)</span>
<a name="line-85"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Sql</span><span class='hs-varop'>.</span><span class='hs-conid'>Print</span> <span class='hs-layout'>(</span><span class='hs-varid'>ppSql</span><span class='hs-layout'>)</span>
<a name="line-86"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Optimize</span> <span class='hs-layout'>(</span><span class='hs-varid'>optimize</span><span class='hs-layout'>)</span>
<a name="line-87"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Query</span>
<a name="line-88"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Database</span><span class='hs-varop'>.</span><span class='hs-conid'>HaskellDB</span><span class='hs-varop'>.</span><span class='hs-conid'>Database</span>
<a name="line-89"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>PrettyPrint</span><span class='hs-varop'>.</span><span class='hs-conid'>HughesPJ</span> <span class='hs-layout'>(</span><span class='hs-conid'>Doc</span><span class='hs-layout'>)</span>
<a name="line-90"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Foldable</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldr'</span><span class='hs-layout'>)</span>
<a name="line-91"></a>
<a name="line-92"></a><a name="Param"></a><span class='hs-comment'>-- | Represents a query parameter. Left parameters are indexed</span>
<a name="line-93"></a><a name="Param"></a><span class='hs-comment'>-- by position, while right parameters are named.</span>
<a name="line-94"></a><a name="Param"></a><span class='hs-keyword'>type</span> <span class='hs-conid'>Param</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Either</span> <span class='hs-conid'>Int</span> <span class='hs-conid'>String</span>
<a name="line-95"></a>
<a name="line-96"></a><span class='hs-comment'>-- | Shows the optimized SQL for the query.</span>
<a name="line-97"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-98"></a> <span class='hs-varid'>showsPrec</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>query</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shows</span> <span class='hs-layout'>(</span><span class='hs-varid'>showSql</span> <span class='hs-varid'>query</span><span class='hs-layout'>)</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="showQuery"></a><span class='hs-comment'>-- | Shows the optimized 'PrimQuery'.</span>
<a name="line-101"></a><span class='hs-definition'>showQuery</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-102"></a><span class='hs-definition'>showQuery</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varop'>.</span> <span class='hs-varid'>optimize</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runQuery</span>
<a name="line-103"></a>
<a name="line-104"></a><a name="showQueryUnOpt"></a><span class='hs-comment'>-- | Shows the unoptimized 'PrimQuery'.</span>
<a name="line-105"></a><span class='hs-definition'>showQueryUnOpt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-106"></a><span class='hs-definition'>showQueryUnOpt</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runQuery</span>
<a name="line-107"></a>
<a name="line-108"></a><a name="showSql"></a><span class='hs-comment'>-- | Shows the optimized SQL query.</span>
<a name="line-109"></a><span class='hs-definition'>showSql</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-110"></a><span class='hs-definition'>showSql</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ppSql</span> <span class='hs-varop'>.</span> <span class='hs-varid'>sqlQuery</span> <span class='hs-varid'>defaultSqlGenerator</span> <span class='hs-varop'>.</span> <span class='hs-varid'>optimize</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runQuery</span>
<a name="line-111"></a>
<a name="line-112"></a><a name="showSqlUnOpt"></a><span class='hs-comment'>-- | Shows the unoptimized SQL query.</span>
<a name="line-113"></a><span class='hs-definition'>showSqlUnOpt</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-114"></a><span class='hs-definition'>showSqlUnOpt</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>show</span> <span class='hs-varop'>.</span> <span class='hs-varid'>ppSql</span> <span class='hs-varop'>.</span> <span class='hs-varid'>sqlQuery</span> <span class='hs-varid'>defaultSqlGenerator</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runQuery</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="queryParams"></a><span class='hs-comment'>-- | Get paramaters from a query in order.</span>
<a name="line-117"></a><span class='hs-definition'>queryParams</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Query</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rel</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Param</span><span class='hs-keyglyph'>]</span>
<a name="line-118"></a><span class='hs-definition'>queryParams</span> <span class='hs-varid'>q</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>snd</span> <span class='hs-varop'>.</span> <span class='hs-varid'>indexParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>selectParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>toSelect</span> <span class='hs-varop'>$</span> <span class='hs-varid'>q</span>
<a name="line-119"></a> <span class='hs-keyword'>where</span>
<a name="line-120"></a> <span class='hs-comment'>-- Use foldr so we don't have to reverse parameter list built.</span>
<a name="line-121"></a> <span class='hs-varid'>indexParams</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldr'</span> <span class='hs-varid'>renumber</span> <span class='hs-layout'>(</span><span class='hs-num'>1</span><span class='hs-layout'>,</span> <span class='hs-conid'>[]</span><span class='hs-layout'>)</span>
<a name="line-122"></a> <span class='hs-varid'>renumber</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>idx</span><span class='hs-layout'>,</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>idx</span><span class='hs-layout'>,</span> <span class='hs-conid'>Right</span> <span class='hs-varid'>n</span> <span class='hs-conop'>:</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span>
<a name="line-123"></a> <span class='hs-varid'>renumber</span> <span class='hs-conid'>Nothing</span> <span class='hs-layout'>(</span><span class='hs-varid'>idx</span><span class='hs-layout'>,</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>idx</span> <span class='hs-varop'>+</span> <span class='hs-num'>1</span><span class='hs-layout'>,</span> <span class='hs-conid'>Left</span> <span class='hs-varid'>idx</span> <span class='hs-conop'>:</span> <span class='hs-varid'>ps</span><span class='hs-layout'>)</span>
<a name="line-124"></a> <span class='hs-varid'>toSelect</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sqlQuery</span> <span class='hs-varid'>defaultSqlGenerator</span> <span class='hs-varop'>.</span> <span class='hs-varid'>optimize</span> <span class='hs-varop'>.</span> <span class='hs-varid'>runQuery</span>
<a name="line-125"></a> <span class='hs-comment'>-- | All parameters that are in the select, in the textual order</span>
<a name="line-126"></a> <span class='hs-comment'>-- they will appear.</span>
<a name="line-127"></a> <span class='hs-varid'>selectParams</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SqlSelect</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>SqlName</span><span class='hs-keyglyph'>]</span>
<a name="line-128"></a> <span class='hs-varid'>selectParams</span> <span class='hs-varid'>select</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>SqlSelect</span> <span class='hs-layout'>{</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>attrs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>tables</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span><span class='hs-layout'>,</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>criteria</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>groupby</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>g</span><span class='hs-layout'>,</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-varid'>orderby</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>o</span><span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-129"></a> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>attrParams</span> <span class='hs-varid'>a</span> <span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-varid'>tableParams</span> <span class='hs-varid'>t</span> <span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-varid'>criteriaParams</span> <span class='hs-varid'>c</span> <span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span>
<a name="line-130"></a> <span class='hs-layout'>(</span><span class='hs-varid'>groupByParams</span> <span class='hs-varid'>g</span> <span class='hs-varop'>++</span><span class='hs-layout'>)</span> <span class='hs-varop'>.</span> <span class='hs-varid'>orderByParams</span> <span class='hs-varop'>$</span> <span class='hs-varid'>o</span>
<a name="line-131"></a> <span class='hs-keyword'>where</span>
<a name="line-132"></a> <span class='hs-varid'>attrParams</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getParams</span> <span class='hs-layout'>(</span><span class='hs-varid'>exprParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span><span class='hs-layout'>)</span>
<a name="line-133"></a> <span class='hs-varid'>tableParams</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getParams</span> <span class='hs-layout'>(</span><span class='hs-varid'>selectParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span><span class='hs-layout'>)</span>
<a name="line-134"></a> <span class='hs-varid'>criteriaParams</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getParams</span> <span class='hs-varid'>exprParams</span>
<a name="line-135"></a> <span class='hs-varid'>groupByParams</span> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-136"></a> <span class='hs-varid'>groupByParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>All</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-137"></a> <span class='hs-varid'>groupByParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>S</span><span class='hs-varop'>.</span><span class='hs-conid'>Columns</span> <span class='hs-varid'>cols</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getParams</span> <span class='hs-layout'>(</span><span class='hs-varid'>exprParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>snd</span><span class='hs-layout'>)</span> <span class='hs-varid'>cols</span>
<a name="line-138"></a> <span class='hs-varid'>orderByParams</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>getParams</span> <span class='hs-layout'>(</span><span class='hs-varid'>exprParams</span> <span class='hs-varop'>.</span> <span class='hs-varid'>fst</span><span class='hs-layout'>)</span>
<a name="line-139"></a> <span class='hs-varid'>getParams</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>SqlName</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>SqlName</span><span class='hs-keyglyph'>]</span>
<a name="line-140"></a> <span class='hs-varid'>getParams</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-varid'>f</span>
<a name="line-141"></a> <span class='hs-comment'>-- | All parameters in the expression, in the textual order</span>
<a name="line-142"></a> <span class='hs-comment'>-- in which they will appear.</span>
<a name="line-143"></a> <span class='hs-varid'>exprParams</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>SqlExpr</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>SqlName</span><span class='hs-keyglyph'>]</span>
<a name="line-144"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ColumnSqlExpr</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-145"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ConstSqlExpr</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-146"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ParamSqlExpr</span> <span class='hs-varid'>p</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>p</span><span class='hs-keyglyph'>]</span>
<a name="line-147"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>BinSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>l</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>l</span> <span class='hs-varop'>++</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>r</span>
<a name="line-148"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>PrefixSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>e</span>
<a name="line-149"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>PostfixSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>e</span>
<a name="line-150"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>FunSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>concatMap</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span>
<a name="line-151"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>AggrFunSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>concatMap</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span>
<a name="line-152"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>CaseSqlExpr</span> <span class='hs-varid'>es</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-153"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>caseExprs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-layout'>(</span><span class='hs-varid'>l</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>l</span> <span class='hs-varop'>++</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-varid'>es</span>
<a name="line-154"></a> <span class='hs-keyword'>in</span> <span class='hs-varid'>caseExprs</span> <span class='hs-varop'>++</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>e</span>
<a name="line-155"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ListSqlExpr</span> <span class='hs-varid'>es</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concatMap</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>es</span>
<a name="line-156"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ExistsSqlExpr</span> <span class='hs-varid'>select</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>selectParams</span> <span class='hs-varid'>select</span>
<a name="line-157"></a> <span class='hs-varid'>exprParams</span> <span class='hs-conid'>PlaceHolderSqlExpr</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-158"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>ParensSqlExpr</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>e</span>
<a name="line-159"></a> <span class='hs-varid'>exprParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>CastSqlExpr</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>exprParams</span> <span class='hs-varid'>e</span>
<a name="line-160"></a> <span class='hs-varid'>selectParams</span> <span class='hs-layout'>(</span><span class='hs-conid'>SqlBin</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>l</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>selectParams</span> <span class='hs-varid'>l</span> <span class='hs-varop'>++</span> <span class='hs-varid'>selectParams</span> <span class='hs-varid'>r</span>
<a name="line-161"></a> <span class='hs-varid'>selectParams</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
</pre></body>
</html>
|