on be54907 help sign in
rel8/src/Rel8.hs
373 lines 6.9 kB history raw
1{-# language DuplicateRecordFields #-}
3module Rel8
4 ( -- * Database types
5 -- ** @DBType@
6 DBType(..)
8 -- *** Deriving-via helpers
9 -- **** @JSONEncoded@
10 , JSONEncoded(..)
11 , JSONBEncoded(..)
13 -- **** @ReadShow@
14 , ReadShow(..)
16 -- **** Generic
17 , Composite(..), DBComposite(..), compose, decompose
18 , Enum(..), DBEnum(..), Enumable
20 -- *** @TypeInformation@
21 , TypeInformation(..)
22 , mapTypeInformation
23 , parseTypeInformation
25 -- ** The @DBType@ hierarchy
26 , DBSemigroup(..)
27 , DBMonoid(..)
28 , DBNum
29 , DBIntegral
30 , DBFractional
31 , DBFloating
33 -- * Tables and higher-kinded tables
34 , Rel8able, KRel8able
35 , Column
36 , HADT
37 , HEither
38 , HMaybe
39 , HList
40 , HNonEmpty
41 , HThese
42 , Lift
44 , Table(..)
45 , HTable
46 , Recontextualize
47 , AltTable((<|>:))
48 , AlternativeTable( emptyTable )
49 , EqTable, (==:), (/=:)
50 , OrdTable, ascTable, descTable
51 , lit
52 , bool
53 , case_
55 -- ** @MaybeTable@
56 , MaybeTable
57 , maybeTable, ($?), nothingTable, justTable
58 , isNothingTable, isJustTable
59 , optional
60 , catMaybeTable
61 , traverseMaybeTable
62 , aggregateMaybeTable
63 , nameMaybeTable
65 -- ** @EitherTable@
66 , EitherTable
67 , eitherTable, leftTable, rightTable
68 , isLeftTable, isRightTable
69 , keepLeftTable
70 , keepRightTable
71 , bitraverseEitherTable
72 , aggregateEitherTable
73 , nameEitherTable
75 -- ** @TheseTable@
76 , TheseTable
77 , theseTable, thisTable, thatTable, thoseTable
78 , isThisTable, isThatTable, isThoseTable
79 , hasHereTable, hasThereTable
80 , justHereTable, justThereTable
81 , alignBy
82 , keepHereTable, loseHereTable
83 , keepThereTable, loseThereTable
84 , keepThisTable, loseThisTable
85 , keepThatTable, loseThatTable
86 , keepThoseTable, loseThoseTable
87 , bitraverseTheseTable
88 , aggregateTheseTable
89 , nameTheseTable
91 -- ** @ListTable@
92 , ListTable
93 , listTable
94 , nameListTable
95 , many
96 , manyExpr
97 , catListTable
98 , catList
100 -- ** @NonEmptyTable@
101 , NonEmptyTable
102 , nonEmptyTable
103 , nameNonEmptyTable
104 , some
105 , someExpr
106 , catNonEmptyTable
107 , catNonEmpty
109 -- ** @ADT@
110 , ADT, ADTable
111 , BuildADT, buildADT
112 , ConstructADT, constructADT
113 , DeconstructADT, deconstructADT
114 , NameADT, nameADT
115 , AggregateADT, aggregateADT
117 -- ** @HKD@
118 , HKD, HKDable
119 , BuildHKD, buildHKD
120 , ConstructHKD, constructHKD
121 , DeconstructHKD, deconstructHKD
122 , NameHKD, nameHKD
123 , AggregateHKD, aggregateHKD
125 -- ** Table schemas
126 , TableSchema(..)
127 , Name
128 , namesFromLabels
129 , namesFromLabelsWith
131 -- * Expressions
132 , Expr
133 , Sql
134 , litExpr
135 , unsafeCastExpr
136 , unsafeLiteral
138 -- ** @null@
139 , NotNull
140 , Nullable
141 , null
142 , nullify
143 , nullable
144 , isNull
145 , isNonNull
146 , mapNull
147 , liftOpNull
148 , catNull
149 , coalesce
151 -- ** Boolean operations
152 , DBEq
153 , true, false, not_
154 , (&&.), and_
155 , (||.), or_
156 , (==.), (/=.), (==?), (/=?)
157 , in_
158 , boolExpr, caseExpr
160 -- ** Ordering
161 , DBOrd
162 , (<.), (<=.), (>.), (>=.)
163 , (<?), (<=?), (>?), (>=?)
164 , leastExpr, greatestExpr
166 -- ** Functions
167 , Function
168 , function
169 , nullaryFunction
170 , binaryOperator
172 -- * Queries
173 , Query
174 , showQuery
176 -- ** Selecting rows
177 , Selects
178 , each
179 , values
181 -- ** Filtering
182 , filter
183 , where_
184 , present
185 , absent
186 , distinct
187 , distinctOn
188 , distinctOnBy
190 -- ** @LIMIT@/@OFFSET@
191 , limit
192 , offset
194 -- ** @UNION@
195 , union
196 , unionAll
198 -- ** @INTERSECT@
199 , intersect
200 , intersectAll
202 -- ** @EXCEPT@
203 , except
204 , exceptAll
206 -- ** @EXISTS@
207 , exists
208 , with
209 , withBy
210 , without
211 , withoutBy
213 -- ** Aggregation
214 , Aggregate
215 , Aggregates
216 , aggregate
217 , countRows
218 , groupBy
219 , listAgg, listAggExpr
220 , nonEmptyAgg, nonEmptyAggExpr
221 , DBMax, max
222 , DBMin, min
223 , DBSum, sum, sumWhere
224 , DBString, stringAgg
225 , count
226 , countStar
227 , countDistinct
228 , countWhere
229 , and
230 , or
232 -- ** Ordering
233 , orderBy
234 , Order
235 , asc
236 , desc
237 , nullsFirst
238 , nullsLast
240 -- * IO
241 , Serializable
242 , ToExprs(..)
243 , FromExprs
244 , Result
246 -- * Running statements
247 -- $running
249 -- ** @SELECT@
250 , select
252 -- ** @INSERT@
253 , Insert(..)
254 , OnConflict(..)
255 , insert
256 , unsafeDefault
258 -- ** @DELETE@
259 , Delete(..)
260 , delete
262 -- ** @UPDATE@
263 , Update(..)
264 , update
266 -- ** @.. RETURNING@
267 , Returning(..)
269 -- ** @CREATE VIEW@
270 , createView
272 -- ** Sequences
273 , nextval
274 , evaluate
276 -- * Implementation details
277 , HKDT(..)
278 ) where
280-- base
281import Prelude ()
283-- rel8
284import Rel8.Aggregate
285import Rel8.Column
286import Rel8.Column.ADT
287import Rel8.Column.Either
288import Rel8.Column.Lift
289import Rel8.Column.List
290import Rel8.Column.Maybe
291import Rel8.Column.NonEmpty
292import Rel8.Column.These
293import Rel8.Expr
294import Rel8.Expr.Aggregate
295import Rel8.Expr.Bool
296import Rel8.Expr.Default
297import Rel8.Expr.Eq
298import Rel8.Expr.Function
299import Rel8.Expr.Null
300import Rel8.Expr.Opaleye (unsafeCastExpr, unsafeLiteral)
301import Rel8.Expr.Ord
302import Rel8.Expr.Order
303import Rel8.Expr.Serialize
304import Rel8.Expr.Sequence
305import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
306import Rel8.Order
307import Rel8.Query
308import Rel8.Query.Aggregate
309import Rel8.Query.Distinct
310import Rel8.Query.Each
311import Rel8.Query.Either
312import Rel8.Query.Evaluate
313import Rel8.Query.Exists
314import Rel8.Query.Filter
315import Rel8.Query.Limit
316import Rel8.Query.List
317import Rel8.Query.Maybe
318import Rel8.Query.Null
319import Rel8.Query.Order
320import Rel8.Query.SQL (showQuery)
321import Rel8.Query.Set
322import Rel8.Query.These
323import Rel8.Query.Values
324import Rel8.Schema.HTable
325import Rel8.Schema.Name
326import Rel8.Schema.Null hiding ( nullable )
327import Rel8.Schema.Result ( Result )
328import Rel8.Schema.Table
329import Rel8.Statement.Delete
330import Rel8.Statement.Insert
331import Rel8.Statement.Returning
332import Rel8.Statement.Select
333import Rel8.Statement.Update
334import Rel8.Statement.View
335import Rel8.Table
336import Rel8.Table.ADT
337import Rel8.Table.Aggregate
338import Rel8.Table.Alternative
339import Rel8.Table.Bool
340import Rel8.Table.Either
341import Rel8.Table.Eq
342import Rel8.Table.HKD
343import Rel8.Table.List
344import Rel8.Table.Maybe
345import Rel8.Table.Name
346import Rel8.Table.NonEmpty
347import Rel8.Table.Ord
348import Rel8.Table.Order
349import Rel8.Table.Recontextualize
350import Rel8.Table.Rel8able ()
351import Rel8.Table.Serialize
352import Rel8.Table.These
353import Rel8.Type
354import Rel8.Type.Composite
355import Rel8.Type.Eq
356import Rel8.Type.Enum
357import Rel8.Type.Information
358import Rel8.Type.JSONBEncoded
359import Rel8.Type.JSONEncoded
360import Rel8.Type.Monoid
361import Rel8.Type.Num
362import Rel8.Type.Ord
363import Rel8.Type.ReadShow
364import Rel8.Type.Semigroup
365import Rel8.Type.String
366import Rel8.Type.Sum
369-- $running
370-- To run queries and otherwise interact with a PostgreSQL database, Rel8
371-- provides 'select', 'insert', 'update' and 'delete' functions. Note that
372-- 'insert', 'update' and 'delete' will generally need the
373-- `DuplicateRecordFields` language extension enabled.