on 9903886 help sign in
rel8/src/Rel8.hs
373 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 , listAgg, listAggExpr
225 , nonEmptyAgg, nonEmptyAggExpr
226 , DBMax, max
227 , DBMin, min
228 , DBSum, sum, sumWhere
229 , DBString, stringAgg
230 , count
231 , countStar
232 , countDistinct
233 , countWhere
234 , and
235 , or
237 -- ** Ordering
238 , orderBy
239 , Order
240 , asc
241 , desc
242 , nullsFirst
243 , nullsLast
245 -- * IO
246 , Serializable
248 -- * Running statements
249 -- ** @SELECT@
250 , select
252 -- ** @INSERT@
253 , Insert(..)
254 , OnConflict(..)
255 , insert
256 , toInsert
257 , toInsertDefaults
259 -- ** @DELETE@
260 , Delete(..)
261 , delete
263 -- ** @UPDATE@
264 , update
265 , Update(..)
267 -- ** @.. RETURNING@
268 , Returning(..)
270 -- ** @CREATE VIEW@
271 , createView
273 -- * TODO
274 -- TODO
275 -- These need organizing, but are reachable from Rel8's documentation so we
276 -- do need to export and document them.
277 , Nullable
278 , NotNull
279 , HTable
280 , Labelable
281 , ToExprs(..)
282 , FromExprs
283 , Result
284 , HKDT(..)
285 ) where
287-- base
288import Prelude ()
290-- rel8
291import Rel8.Aggregate
292import Rel8.Column
293import Rel8.Column.ADT
294import Rel8.Column.Either
295import Rel8.Column.Field
296import Rel8.Column.Lift
297import Rel8.Column.List
298import Rel8.Column.Maybe
299import Rel8.Column.NonEmpty
300import Rel8.Column.These
301import Rel8.Expr
302import Rel8.Expr.Aggregate
303import Rel8.Expr.Bool
304import Rel8.Expr.Eq
305import Rel8.Expr.Function
306import Rel8.Expr.Null
307import Rel8.Expr.Opaleye (unsafeCastExpr)
308import Rel8.Expr.Ord
309import Rel8.Expr.Order
310import Rel8.Expr.Serialize
311import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
312import Rel8.Kind.Necessity
313import Rel8.Order
314import Rel8.Query
315import Rel8.Query.Aggregate
316import Rel8.Query.Distinct
317import Rel8.Query.Each
318import Rel8.Query.Either
319import Rel8.Query.Exists
320import Rel8.Query.Filter
321import Rel8.Query.Limit
322import Rel8.Query.List
323import Rel8.Query.Maybe
324import Rel8.Query.Null
325import Rel8.Query.Order
326import Rel8.Query.SQL (showQuery)
327import Rel8.Query.Set
328import Rel8.Query.These
329import Rel8.Query.Values
330import Rel8.Schema.Context.Label
331import Rel8.Schema.HTable
332import Rel8.Schema.Name
333import Rel8.Schema.Null hiding ( nullable )
334import Rel8.Schema.Result ( Result )
335import Rel8.Schema.Table
336import Rel8.Statement.Delete
337import Rel8.Statement.Insert
338import Rel8.Statement.Returning
339import Rel8.Statement.Select
340import Rel8.Statement.Update
341import Rel8.Statement.View
342import Rel8.Table
343import Rel8.Table.ADT
344import Rel8.Table.Aggregate
345import Rel8.Table.Alternative
346import Rel8.Table.Bool
347import Rel8.Table.Either
348import Rel8.Table.Eq
349import Rel8.Table.HKD
350import Rel8.Table.Insert
351import Rel8.Table.List
352import Rel8.Table.Maybe
353import Rel8.Table.Name
354import Rel8.Table.NonEmpty
355import Rel8.Table.Ord
356import Rel8.Table.Order
357import Rel8.Table.Rel8able ()
358import Rel8.Table.Serialize
359import Rel8.Table.These
360import Rel8.Type
361import Rel8.Type.Composite
362import Rel8.Type.Eq
363import Rel8.Type.Enum
364import Rel8.Type.Information
365import Rel8.Type.JSONBEncoded
366import Rel8.Type.JSONEncoded
367import Rel8.Type.Monoid
368import Rel8.Type.Num
369import Rel8.Type.Ord
370import Rel8.Type.ReadShow
371import Rel8.Type.Semigroup
372import Rel8.Type.String
373import Rel8.Type.Sum