on e548510 help sign in
rel8/src/Rel8.hs
374 lines 7.0 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, Field, Necessity( Required, Optional )
36 , Default
37 , HADT
38 , HEither
39 , HMaybe
40 , HList
41 , HNonEmpty
42 , HThese
43 , Lift
45 , Table(..)
46 , AltTable((<|>:))
47 , AlternativeTable( emptyTable )
48 , EqTable, (==:), (/=:)
49 , OrdTable, ascTable, descTable
50 , lit
51 , bool
52 , case_
54 -- ** @MaybeTable@
55 , MaybeTable
56 , maybeTable, ($?), nothingTable, justTable
57 , isNothingTable, isJustTable
58 , optional
59 , catMaybeTable
60 , bindMaybeTable
61 , traverseMaybeTable
62 , aggregateMaybeTable
63 , insertMaybeTable
64 , nameMaybeTable
66 -- ** @EitherTable@
67 , EitherTable
68 , eitherTable, leftTable, rightTable
69 , isLeftTable, isRightTable
70 , keepLeftTable
71 , keepRightTable
72 , bindEitherTable
73 , bitraverseEitherTable
74 , aggregateEitherTable
75 , insertEitherTable
76 , nameEitherTable
78 -- ** @TheseTable@
79 , TheseTable
80 , theseTable, thisTable, thatTable, thoseTable
81 , isThisTable, isThatTable, isThoseTable
82 , hasHereTable, hasThereTable
83 , justHereTable, justThereTable
84 , alignBy
85 , keepHereTable, loseHereTable
86 , keepThereTable, loseThereTable
87 , keepThisTable, loseThisTable
88 , keepThatTable, loseThatTable
89 , keepThoseTable, loseThoseTable
90 , bindTheseTable
91 , bitraverseTheseTable
92 , aggregateTheseTable
93 , insertTheseTable
94 , nameTheseTable
96 -- ** @ListTable@
97 , ListTable
98 , listTable
99 , insertListTable
100 , nameListTable
101 , many
102 , manyExpr
103 , catListTable
104 , catList
106 -- ** @NonEmptyTable@
107 , NonEmptyTable
108 , nonEmptyTable
109 , insertNonEmptyTable
110 , nameNonEmptyTable
111 , some
112 , someExpr
113 , catNonEmptyTable
114 , catNonEmpty
116 -- ** @ADT@
117 , ADT, ADTable, fromADT, toADT
118 , BuildADT, buildADT
119 , ConstructADT, constructADT
120 , DeconstructADT, deconstructADT
121 , InsertADT, insertADT
122 , NameADT, nameADT
123 , AggregateADT, aggregateADT
125 -- ** @HKD@
126 , HKD, HKDable, fromHKD, toHKD
127 , BuildHKD, buildHKD
128 , ConstructHKD, constructHKD
129 , DeconstructHKD, deconstructHKD
130 , InsertHKD, insertHKD
131 , NameHKD, nameHKD
132 , AggregateHKD, aggregateHKD
134 -- ** Table schemas
135 , TableSchema(..)
136 , Name
137 , namesFromLabels
138 , namesFromLabelsWith
140 -- * Expressions
141 , Expr
142 , Sql
143 , litExpr
144 , unsafeCastExpr
146 -- ** @null@
147 , null
148 , nullify
149 , nullable
150 , isNull
151 , isNonNull
152 , mapNull
153 , liftOpNull
154 , catNull
155 , coalesce
157 -- ** Boolean operations
158 , DBEq
159 , true, false, not_
160 , (&&.), and_
161 , (||.), or_
162 , (==.), (/=.), (==?), (/=?)
163 , in_
164 , boolExpr, caseExpr
166 -- ** Ordering
167 , DBOrd
168 , (<.), (<=.), (>.), (>=.)
169 , (<?), (<=?), (>?), (>=?)
170 , leastExpr, greatestExpr
172 -- ** Functions
173 , Function
174 , function
175 , nullaryFunction
176 , binaryOperator
178 -- * Queries
179 , Query
180 , showQuery
182 -- ** Selecting rows
183 , Selects
184 , each
185 , values
187 -- ** Filtering
188 , filter
189 , where_
190 , whereExists
191 , whereNotExists
192 , distinct
193 , distinctOn
194 , distinctOnBy
196 -- ** @LIMIT@/@OFFSET@
197 , limit
198 , offset
200 -- ** @UNION@
201 , union
202 , unionAll
204 -- ** @INTERSECT@
205 , intersect
206 , intersectAll
208 -- ** @EXCEPT@
209 , except
210 , exceptAll
212 -- ** @EXISTS@
213 , exists
214 , with
215 , withBy
216 , without
217 , withoutBy
219 -- ** Aggregation
220 , Aggregate
221 , aggregate
222 , countRows
223 , groupBy
224 , headAgg
225 , listAgg, listAggExpr
226 , nonEmptyAgg, nonEmptyAggExpr
227 , DBMax, max
228 , DBMin, min
229 , DBSum, sum, sumWhere
230 , DBString, stringAgg
231 , count
232 , countStar
233 , countDistinct
234 , countWhere
235 , and
236 , or
238 -- ** Ordering
239 , orderBy
240 , Order
241 , asc
242 , desc
243 , nullsFirst
244 , nullsLast
246 -- * IO
247 , Serializable
249 -- * Running statements
250 -- ** @SELECT@
251 , select
253 -- ** @INSERT@
254 , Insert(..)
255 , OnConflict(..)
256 , insert
257 , toInsert
258 , toInsertDefaults
260 -- ** @DELETE@
261 , Delete(..)
262 , delete
264 -- ** @UPDATE@
265 , update
266 , Update(..)
268 -- ** @.. RETURNING@
269 , Returning(..)
271 -- ** @CREATE VIEW@
272 , createView
274 -- * TODO
275 -- TODO
276 -- These need organizing, but are reachable from Rel8's documentation so we
277 -- do need to export and document them.
278 , Nullable
279 , NotNull
280 , HTable
281 , Labelable
282 , ToExprs(..)
283 , FromExprs
284 , Result
285 , HKDT(..)
286 ) where
288-- base
289import Prelude ()
291-- rel8
292import Rel8.Aggregate
293import Rel8.Column
294import Rel8.Column.ADT
295import Rel8.Column.Either
296import Rel8.Column.Field
297import Rel8.Column.Lift
298import Rel8.Column.List
299import Rel8.Column.Maybe
300import Rel8.Column.NonEmpty
301import Rel8.Column.These
302import Rel8.Expr
303import Rel8.Expr.Aggregate
304import Rel8.Expr.Bool
305import Rel8.Expr.Eq
306import Rel8.Expr.Function
307import Rel8.Expr.Null
308import Rel8.Expr.Opaleye (unsafeCastExpr)
309import Rel8.Expr.Ord
310import Rel8.Expr.Order
311import Rel8.Expr.Serialize
312import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
313import Rel8.Kind.Necessity
314import Rel8.Order
315import Rel8.Query
316import Rel8.Query.Aggregate
317import Rel8.Query.Distinct
318import Rel8.Query.Each
319import Rel8.Query.Either
320import Rel8.Query.Exists
321import Rel8.Query.Filter
322import Rel8.Query.Limit
323import Rel8.Query.List
324import Rel8.Query.Maybe
325import Rel8.Query.Null
326import Rel8.Query.Order
327import Rel8.Query.SQL (showQuery)
328import Rel8.Query.Set
329import Rel8.Query.These
330import Rel8.Query.Values
331import Rel8.Schema.Context.Label
332import Rel8.Schema.HTable
333import Rel8.Schema.Name
334import Rel8.Schema.Null hiding ( nullable )
335import Rel8.Schema.Result ( Result )
336import Rel8.Schema.Table
337import Rel8.Statement.Delete
338import Rel8.Statement.Insert
339import Rel8.Statement.Returning
340import Rel8.Statement.Select
341import Rel8.Statement.Update
342import Rel8.Statement.View
343import Rel8.Table
344import Rel8.Table.ADT
345import Rel8.Table.Aggregate
346import Rel8.Table.Alternative
347import Rel8.Table.Bool
348import Rel8.Table.Either
349import Rel8.Table.Eq
350import Rel8.Table.HKD
351import Rel8.Table.Insert
352import Rel8.Table.List
353import Rel8.Table.Maybe
354import Rel8.Table.Name
355import Rel8.Table.NonEmpty
356import Rel8.Table.Ord
357import Rel8.Table.Order
358import Rel8.Table.Rel8able ()
359import Rel8.Table.Serialize
360import Rel8.Table.These
361import Rel8.Type
362import Rel8.Type.Composite
363import Rel8.Type.Eq
364import Rel8.Type.Enum
365import Rel8.Type.Information
366import Rel8.Type.JSONBEncoded
367import Rel8.Type.JSONEncoded
368import Rel8.Type.Monoid
369import Rel8.Type.Num
370import Rel8.Type.Ord
371import Rel8.Type.ReadShow
372import Rel8.Type.Semigroup
373import Rel8.Type.String
374import Rel8.Type.Sum