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