on 06f34d2 help sign in
rel8/src/Rel8.hs
374 lines 7.1 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
104 -- ** @NonEmptyTable@
105 , NonEmptyTable
106 , nonEmptyTable
107 , insertNonEmptyTable
108 , nameNonEmptyTable
109 , some
110 , someExpr
112 -- ** @ADT@
113 , ADT, ADTable, fromADT, toADT
114 , BuildADT, buildADT
115 , ConstructADT, constructADT
116 , DeconstructADT, deconstructADT
117 , InsertADT, insertADT
118 , NameADT, nameADT
119 , AggregateADT, aggregateADT
121 -- ** @HKD@
122 , HKD, HKDable, fromHKD, toHKD
123 , BuildHKD, buildHKD
124 , ConstructHKD, constructHKD
125 , DeconstructHKD, deconstructHKD
126 , InsertHKD, insertHKD
127 , NameHKD, nameHKD
128 , AggregateHKD, aggregateHKD
130 -- ** Table schemas
131 , TableSchema(..)
132 , Name
133 , namesFromLabels
134 , namesFromLabelsWith
136 -- * Expressions
137 , Expr
138 , Sql
139 , litExpr
140 , unsafeCastExpr
142 -- ** @null@
143 , null
144 , nullify
145 , nullable
146 , isNull
147 , isNonNull
148 , mapNull
149 , liftOpNull
150 , catNull
151 , coalesce
153 -- ** Boolean operations
154 , DBEq
155 , true, false, not_
156 , (&&.), and_
157 , (||.), or_
158 , (==.), (/=.), (==?), (/=?)
159 , in_
160 , boolExpr, caseExpr
162 -- ** Ordering
163 , DBOrd
164 , (<.), (<=.), (>.), (>=.)
165 , (<?), (<=?), (>?), (>=?)
166 , leastExpr, greatestExpr
168 -- ** Functions
169 , Function
170 , function
171 , nullaryFunction
172 , binaryOperator
174 -- * Queries
175 , Query
176 , showQuery
178 -- ** Selecting rows
179 , Selects
180 , each
181 , values
183 -- ** Filtering
184 , filter
185 , where_
186 , whereExists
187 , whereNotExists
188 , distinct
189 , distinctOn
190 , distinctOnBy
192 -- ** @LIMIT@/@OFFSET@
193 , limit
194 , offset
196 -- ** @UNION@
197 , union
198 , unionAll
200 -- ** @INTERSECT@
201 , intersect
202 , intersectAll
204 -- ** @EXCEPT@
205 , except
206 , exceptAll
208 -- ** @EXISTS@
209 , exists
210 , with
211 , withBy
212 , without
213 , withoutBy
215 -- ** Aggregation
216 , Aggregate
217 , aggregate
218 , countRows
219 , groupBy
220 , headAgg
221 , array1DAggExpr
222 , listAgg, listAggWithOrder, listAggExpr
223 , nonEmptyAgg, nonEmptyAggWithOrder, 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 , Array1D( Array1D )
276 , NotArray
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.Array1D
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