on 379b492 help sign in
rel8/src/Rel8.hs
391 lines 7.3 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 , Transposes
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 -- ** Projection
177 , Projection
178 , Projectable( project )
179 , Biprojectable( biproject )
180 , Projecting
181 , Field
183 -- ** Selecting rows
184 , Selects
185 , each
186 , values
188 -- ** Filtering
189 , filter
190 , where_
191 , present
192 , absent
193 , distinct
194 , distinctOn
195 , distinctOnBy
197 -- ** @LIMIT@/@OFFSET@
198 , limit
199 , offset
201 -- ** @UNION@
202 , union
203 , unionAll
205 -- ** @INTERSECT@
206 , intersect
207 , intersectAll
209 -- ** @EXCEPT@
210 , except
211 , exceptAll
213 -- ** @EXISTS@
214 , exists
215 , with
216 , withBy
217 , without
218 , withoutBy
220 -- ** Aggregation
221 , Aggregate
222 , Aggregates
223 , aggregate
224 , countRows
225 , groupBy
226 , listAgg, listAggExpr
227 , nonEmptyAgg, nonEmptyAggExpr
228 , DBMax, max
229 , DBMin, min
230 , DBSum, sum, sumWhere
231 , DBString, stringAgg
232 , count
233 , countStar
234 , countDistinct
235 , countWhere
236 , and
237 , or
239 -- ** Ordering
240 , orderBy
241 , Order
242 , asc
243 , desc
244 , nullsFirst
245 , nullsLast
247 -- ** Window functions
248 , indexed
250 -- ** Bindings
251 , rebind
253 -- * IO
254 , Serializable
255 , ToExprs
256 , Result
258 -- * Running statements
259 -- $running
261 -- ** @SELECT@
262 , select
264 -- ** @INSERT@
265 , Insert(..)
266 , OnConflict(..)
267 , Upsert(..)
268 , insert
269 , unsafeDefault
270 , showInsert
272 -- ** @DELETE@
273 , Delete(..)
274 , delete
275 , showDelete
277 -- ** @UPDATE@
278 , Update(..)
279 , update
280 , showUpdate
282 -- ** @.. RETURNING@
283 , Returning(..)
285 -- ** @CREATE VIEW@
286 , createView
288 -- ** Sequences
289 , nextval
290 , evaluate
291 ) where
293-- base
294import Prelude ()
296-- rel8
297import Rel8.Aggregate
298import Rel8.Column
299import Rel8.Column.ADT
300import Rel8.Column.Either
301import Rel8.Column.Lift
302import Rel8.Column.List
303import Rel8.Column.Maybe
304import Rel8.Column.NonEmpty
305import Rel8.Column.These
306import Rel8.Expr
307import Rel8.Expr.Aggregate
308import Rel8.Expr.Bool
309import Rel8.Expr.Default
310import Rel8.Expr.Eq
311import Rel8.Expr.Function
312import Rel8.Expr.Null
313import Rel8.Expr.Opaleye (unsafeCastExpr, unsafeLiteral)
314import Rel8.Expr.Ord
315import Rel8.Expr.Order
316import Rel8.Expr.Serialize
317import Rel8.Expr.Sequence
318import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
319import Rel8.Order
320import Rel8.Query
321import Rel8.Query.Aggregate
322import Rel8.Query.Distinct
323import Rel8.Query.Each
324import Rel8.Query.Either
325import Rel8.Query.Evaluate
326import Rel8.Query.Exists
327import Rel8.Query.Filter
328import Rel8.Query.Indexed
329import Rel8.Query.Limit
330import Rel8.Query.List
331import Rel8.Query.Maybe
332import Rel8.Query.Null
333import Rel8.Query.Order
334import Rel8.Query.SQL (showQuery)
335import Rel8.Query.Set
336import Rel8.Query.These
337import Rel8.Query.Values
338import Rel8.Schema.Field
339import Rel8.Schema.HTable
340import Rel8.Schema.Name
341import Rel8.Schema.Null hiding ( nullable )
342import Rel8.Schema.Result ( Result )
343import Rel8.Schema.Table
344import Rel8.Statement.Delete
345import Rel8.Statement.Insert
346import Rel8.Statement.OnConflict
347import Rel8.Statement.Returning
348import Rel8.Statement.Select
349import Rel8.Statement.SQL
350import Rel8.Statement.Update
351import Rel8.Statement.View
352import Rel8.Table
353import Rel8.Table.ADT
354import Rel8.Table.Aggregate
355import Rel8.Table.Alternative
356import Rel8.Table.Bool
357import Rel8.Table.Either
358import Rel8.Table.Eq
359import Rel8.Table.HKD
360import Rel8.Table.List
361import Rel8.Table.Maybe
362import Rel8.Table.Name
363import Rel8.Table.NonEmpty
364import Rel8.Table.Ord
365import Rel8.Table.Order
366import Rel8.Table.Projection
367import Rel8.Table.Rel8able ()
368import Rel8.Table.Serialize
369import Rel8.Table.These
370import Rel8.Table.Transpose
371import Rel8.Type
372import Rel8.Type.Composite
373import Rel8.Type.Eq
374import Rel8.Type.Enum
375import Rel8.Type.Information
376import Rel8.Type.JSONBEncoded
377import Rel8.Type.JSONEncoded
378import Rel8.Type.Monoid
379import Rel8.Type.Num
380import Rel8.Type.Ord
381import Rel8.Type.ReadShow
382import Rel8.Type.Semigroup
383import Rel8.Type.String
384import Rel8.Type.Sum
387-- $running
388-- To run queries and otherwise interact with a PostgreSQL database, Rel8
389-- provides 'select', 'insert', 'update' and 'delete' functions. Note that
390-- 'insert', 'update' and 'delete' will generally need the
391-- `DuplicateRecordFields` language extension enabled.