on 43bf3a4 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 , 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 , groupBy
219 , headAgg
220 , array1DAggExpr
221 , listAgg, listAggWithOrder, listAggExpr
222 , nonEmptyAgg, nonEmptyAggWithOrder, nonEmptyAggExpr
223 , DBMax, max
224 , DBMin, min
225 , DBSum, sum, sumWhere
226 , DBString, stringAgg
227 , count
228 , countStar
229 , countDistinct
230 , countWhere
231 , and
232 , or
234 -- ** Ordering
235 , orderBy
236 , Order
237 , asc
238 , desc
239 , nullsFirst
240 , nullsLast
242 -- * IO
243 , Serializable
245 -- * Running statements
246 -- ** @SELECT@
247 , select
249 -- ** @INSERT@
250 , Insert(..)
251 , OnConflict(..)
252 , insert
253 , toInsert
254 , toInsertDefaults
256 -- ** @DELETE@
257 , Delete(..)
258 , delete
260 -- ** @UPDATE@
261 , update
262 , Update(..)
264 -- ** @.. RETURNING@
265 , Returning(..)
267 -- ** @CREATE VIEW@
268 , createView
270 -- * TODO
271 -- TODO
272 -- These need organizing, but are reachable from Rel8's documentation so we
273 -- do need to export and document them.
274 , Array1D( Array1D )
275 , NotArray
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.Rel8able ()
357import Rel8.Table.Serialize
358import Rel8.Table.These
359import Rel8.Type
360import Rel8.Type.Array1D
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