on 62f323a 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 , insertMaybeTable
63 , nameMaybeTable
65 -- ** @EitherTable@
66 , EitherTable
67 , eitherTable, leftTable, rightTable
68 , isLeftTable, isRightTable
69 , keepLeftTable
70 , keepRightTable
71 , bindEitherTable
72 , bitraverseEitherTable
73 , insertEitherTable
74 , nameEitherTable
76 -- ** @TheseTable@
77 , TheseTable
78 , theseTable, thisTable, thatTable, thoseTable
79 , isThisTable, isThatTable, isThoseTable
80 , hasHereTable, hasThereTable
81 , justHereTable, justThereTable
82 , alignBy
83 , keepHereTable, loseHereTable
84 , keepThereTable, loseThereTable
85 , keepThisTable, loseThisTable
86 , keepThatTable, loseThatTable
87 , keepThoseTable, loseThoseTable
88 , bindTheseTable
89 , bitraverseTheseTable
90 , insertTheseTable
91 , nameTheseTable
93 -- ** @ListTable@
94 , ListTable
95 , listTable
96 , insertListTable
97 , nameListTable
98 , many
99 , manyExpr
100 , catListTable
101 , catList
103 -- ** @NonEmptyTable@
104 , NonEmptyTable
105 , nonEmptyTable
106 , insertNonEmptyTable
107 , nameNonEmptyTable
108 , some
109 , someExpr
110 , catNonEmptyTable
111 , catNonEmpty
113 -- ** @ADT@
114 , ADT, ADTable, fromADT, toADT
115 , BuildADT, buildADT
116 , ConstructADT, constructADT
117 , DeconstructADT, deconstructADT
118 , InsertADT, insertADT
119 , NameADT, nameADT
120 , AggregateADT, aggregateADT
122 -- ** @HKD@
123 , HKD, HKDable, fromHKD, toHKD
124 , BuildHKD, buildHKD
125 , ConstructHKD, constructHKD
126 , DeconstructHKD, deconstructHKD
127 , InsertHKD, insertHKD
128 , NameHKD, nameHKD
129 , AggregateHKD, aggregateHKD
131 -- ** Table schemas
132 , TableSchema(..)
133 , Name
134 , namesFromLabels
135 , namesFromLabelsWith
137 -- * Expressions
138 , Expr
139 , Sql
140 , litExpr
141 , unsafeCastExpr
143 -- ** @null@
144 , null
145 , nullify
146 , nullable
147 , isNull
148 , isNonNull
149 , mapNull
150 , liftOpNull
151 , catNull
152 , coalesce
154 -- ** Boolean operations
155 , DBEq
156 , true, false, not_
157 , (&&.), and_
158 , (||.), or_
159 , (==.), (/=.), (==?), (/=?)
160 , in_
161 , boolExpr, caseExpr
163 -- ** Ordering
164 , DBOrd
165 , (<.), (<=.), (>.), (>=.)
166 , (<?), (<=?), (>?), (>=?)
167 , leastExpr, greatestExpr
169 -- ** Functions
170 , Function
171 , function
172 , nullaryFunction
173 , binaryOperator
175 -- * Queries
176 , Query
177 , showQuery
179 -- ** Selecting rows
180 , Selects
181 , each
182 , values
184 -- ** Filtering
185 , filter
186 , where_
187 , whereExists
188 , whereNotExists
189 , distinct
190 , distinctOn
191 , distinctOnBy
193 -- ** @LIMIT@/@OFFSET@
194 , limit
195 , offset
197 -- ** @UNION@
198 , union
199 , unionAll
201 -- ** @INTERSECT@
202 , intersect
203 , intersectAll
205 -- ** @EXCEPT@
206 , except
207 , exceptAll
209 -- ** @EXISTS@
210 , exists
211 , with
212 , withBy
213 , without
214 , withoutBy
216 -- ** Aggregation
217 , Aggregate
218 , Aggregates
219 , aggregate
220 , countRows
221 , groupBy
222 , listAgg, listAggExpr
223 , nonEmptyAgg, nonEmptyAggExpr
224 , DBMax, max
225 , DBMin, min
226 , DBSum, sum, sumWhere
227 , DBString, stringAgg
228 , count
229 , countStar
230 , countDistinct
231 , countWhere
232 , and
233 , or
235 -- ** Ordering
236 , orderBy
237 , Order
238 , asc
239 , desc
240 , nullsFirst
241 , nullsLast
243 -- * IO
244 , Serializable
246 -- * Running statements
247 -- ** @SELECT@
248 , select
250 -- ** @INSERT@
251 , Insert(..)
252 , OnConflict(..)
253 , insert
254 , toInsert
255 , toInsertDefaults
257 -- ** @DELETE@
258 , Delete(..)
259 , delete
261 -- ** @UPDATE@
262 , update
263 , Update(..)
265 -- ** @.. RETURNING@
266 , Returning(..)
268 -- ** @CREATE VIEW@
269 , createView
271 -- * TODO
272 -- TODO
273 -- These need organizing, but are reachable from Rel8's documentation so we
274 -- do need to export and document them.
275 , Recontextualize
276 , Nullable
277 , NotNull
278 , HTable
279 , Labelable
280 , ToExprs(..)
281 , FromExprs
282 , Result
283 , HKDT(..)
284 ) where
286-- base
287import Prelude ()
289-- rel8
290import Rel8.Aggregate
291import Rel8.Column
292import Rel8.Column.ADT
293import Rel8.Column.Either
294import Rel8.Column.Field
295import Rel8.Column.Lift
296import Rel8.Column.List
297import Rel8.Column.Maybe
298import Rel8.Column.NonEmpty
299import Rel8.Column.These
300import Rel8.Expr
301import Rel8.Expr.Aggregate
302import Rel8.Expr.Bool
303import Rel8.Expr.Eq
304import Rel8.Expr.Function
305import Rel8.Expr.Null
306import Rel8.Expr.Opaleye (unsafeCastExpr)
307import Rel8.Expr.Ord
308import Rel8.Expr.Order
309import Rel8.Expr.Serialize
310import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
311import Rel8.Kind.Necessity
312import Rel8.Order
313import Rel8.Query
314import Rel8.Query.Aggregate
315import Rel8.Query.Distinct
316import Rel8.Query.Each
317import Rel8.Query.Either
318import Rel8.Query.Exists
319import Rel8.Query.Filter
320import Rel8.Query.Limit
321import Rel8.Query.List
322import Rel8.Query.Maybe
323import Rel8.Query.Null
324import Rel8.Query.Order
325import Rel8.Query.SQL (showQuery)
326import Rel8.Query.Set
327import Rel8.Query.These
328import Rel8.Query.Values
329import Rel8.Schema.Context.Label
330import Rel8.Schema.HTable
331import Rel8.Schema.Name
332import Rel8.Schema.Null hiding ( nullable )
333import Rel8.Schema.Result ( Result )
334import Rel8.Schema.Table
335import Rel8.Statement.Delete
336import Rel8.Statement.Insert
337import Rel8.Statement.Returning
338import Rel8.Statement.Select
339import Rel8.Statement.Update
340import Rel8.Statement.View
341import Rel8.Table
342import Rel8.Table.ADT
343import Rel8.Table.Aggregate
344import Rel8.Table.Alternative
345import Rel8.Table.Bool
346import Rel8.Table.Either
347import Rel8.Table.Eq
348import Rel8.Table.HKD
349import Rel8.Table.Insert
350import Rel8.Table.List
351import Rel8.Table.Maybe
352import Rel8.Table.Name
353import Rel8.Table.NonEmpty
354import Rel8.Table.Ord
355import Rel8.Table.Order
356import Rel8.Table.Recontextualize
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