on cf8bdc7 help sign in
rel8/src/Rel8.hs
352 lines 6.5 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(..)
18 , Enum(..)
20 -- *** @TypeInformation@
21 , TypeInformation(..)
22 , mapTypeInformation
23 , parseTypeInformation
25 -- ** The @DBType@ hierarchy
26 , DBSemigroup(..)
27 , DBMonoid(..)
28 , DBNum
29 , DBIntegral
30 , DBFractional
32 -- * Tables and higher-kinded tables
33 , Rel8able, KRel8able
34 , Column, Field, Necessity( Required, Optional )
35 , Default
36 , HADT
37 , HEither
38 , HMaybe
39 , HList
40 , HNonEmpty
41 , HThese
42 , Lift
44 , Table(..)
45 , AltTable((<|>:))
46 , EqTable, (==:), (/=:)
47 , OrdTable, ascTable, descTable
48 , lit
49 , bool
50 , case_
52 -- ** @MaybeTable@
53 , MaybeTable
54 , maybeTable, ($?), nothingTable, justTable
55 , isNothingTable, isJustTable
56 , optional
57 , catMaybeTable
58 , bindMaybeTable
59 , traverseMaybeTable
61 -- ** @EitherTable@
62 , EitherTable
63 , eitherTable, leftTable, rightTable
64 , isLeftTable, isRightTable
65 , keepLeftTable
66 , keepRightTable
67 , bindEitherTable
68 , bitraverseEitherTable
70 -- ** @TheseTable@
71 , TheseTable
72 , theseTable, thisTable, thatTable, thoseTable
73 , isThisTable, isThatTable, isThoseTable
74 , hasHereTable, hasThereTable
75 , justHereTable, justThereTable
76 , alignBy
77 , keepHereTable, loseHereTable
78 , keepThereTable, loseThereTable
79 , keepThisTable, loseThisTable
80 , keepThatTable, loseThatTable
81 , keepThoseTable, loseThoseTable
82 , bindTheseTable
83 , bitraverseTheseTable
85 -- ** @ListTable@
86 , ListTable
87 , many
89 -- ** @NonEmptyTable@
90 , NonEmptyTable
91 , some
93 -- ** @ADT@
94 , ADT
95 , ConstructADT, constructADT
96 , DeconstructADT, deconstructADT
97 , InsertADT, insertADT
98 , NameADT, nameADT
99 , AggregateADT, aggregateADT
101 -- ** @HKD@
102 , HKD
103 , ConstructHKD, constructHKD
104 , DeconstructHKD, deconstructHKD
105 , InsertHKD, insertHKD
106 , NameHKD, nameHKD
107 , AggregateHKD, aggregateHKD
109 -- ** Table schemas
110 , TableSchema(..)
111 , Name
112 , namesFromLabels
113 , namesFromLabelsWith
115 -- * Expressions
116 , Expr
117 , Sql
118 , litExpr
119 , unsafeCastExpr
121 -- ** @null@
122 , null
123 , nullify
124 , nullable
125 , isNull
126 , isNonNull
127 , mapNull
128 , liftOpNull
129 , catNull
130 , coalesce
132 -- ** Boolean operations
133 , DBEq
134 , true, false, not_
135 , (&&.), and_
136 , (||.), or_
137 , (==.), (/=.), (==?), (/=?)
138 , in_
139 , boolExpr, caseExpr
141 -- ** Ordering
142 , DBOrd
143 , (<.), (<=.), (>.), (>=.)
144 , (<?), (<=?), (>?), (>=?)
145 , leastExpr, greatestExpr
147 -- ** Functions
148 , Function
149 , function
150 , nullaryFunction
151 , binaryOperator
153 -- * Queries
154 , Query
155 , showQuery
157 -- ** Selecting rows
158 , Selects
159 , each
160 , values
162 -- ** Filtering
163 , filter
164 , where_
165 , whereExists
166 , whereNotExists
167 , distinct
168 , distinctOn
169 , distinctOnBy
171 -- ** @LIMIT@/@OFFSET@
172 , limit
173 , offset
175 -- ** @UNION@
176 , union
177 , unionAll
179 -- ** @INTERSECT@
180 , intersect
181 , intersectAll
183 -- ** @EXCEPT@
184 , except
185 , exceptAll
187 -- ** @EXISTS@
188 , exists
189 , with
190 , withBy
191 , without
192 , withoutBy
194 -- ** Aggregation
195 , Aggregate
196 , aggregate
197 , countRows
198 , array1DAggExpr
199 , listAgg, listAggWithOrder, listAggExpr
200 , nonEmptyAgg, nonEmptyAggWithOrder, nonEmptyAggExpr
201 , groupBy
202 , DBMax, max
203 , DBMin, min
204 , DBSum, sum, sumWhere
205 , DBString, stringAgg
206 , count
207 , countStar
208 , countDistinct
209 , countWhere
210 , and
211 , or
213 -- ** Ordering
214 , orderBy
215 , Order
216 , asc
217 , desc
218 , nullsFirst
219 , nullsLast
221 -- * IO
222 , Serializable
224 -- * Running statements
225 -- ** @SELECT@
226 , select
228 -- ** @INSERT@
229 , Insert(..)
230 , OnConflict(..)
231 , insert
232 , toInsert
233 , toInsertDefaults
235 -- ** @DELETE@
236 , Delete(..)
237 , delete
239 -- ** @UPDATE@
240 , update
241 , Update(..)
243 -- ** @.. RETURNING@
244 , Returning(..)
246 -- ** @CREATE VIEW@
247 , createView
249 -- * TODO
250 -- TODO
251 -- These need organizing, but are reachable from Rel8's documentation so we
252 -- do need to export and document them.
253 , Array1D( Array1D )
254 , NotArray
255 , Nullable
256 , NotNull
257 , HTable
258 , Labelable
259 , ToExprs(..)
260 , FromExprs
261 , Result
262 , HKDT(..)
263 ) where
265-- base
266import Prelude ()
268-- rel8
269import Rel8.Aggregate
270import Rel8.Column
271import Rel8.Column.ADT
272import Rel8.Column.Either
273import Rel8.Column.Field
274import Rel8.Column.Lift
275import Rel8.Column.List
276import Rel8.Column.Maybe
277import Rel8.Column.NonEmpty
278import Rel8.Column.These
279import Rel8.Expr
280import Rel8.Expr.Aggregate
281import Rel8.Expr.Bool
282import Rel8.Expr.Eq
283import Rel8.Expr.Function
284import Rel8.Expr.Null
285import Rel8.Expr.Opaleye (unsafeCastExpr)
286import Rel8.Expr.Ord
287import Rel8.Expr.Order
288import Rel8.Expr.Serialize
289import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
290import Rel8.Kind.Necessity
291import Rel8.Order
292import Rel8.Query
293import Rel8.Query.Aggregate
294import Rel8.Query.Distinct
295import Rel8.Query.Each
296import Rel8.Query.Either
297import Rel8.Query.Exists
298import Rel8.Query.Filter
299import Rel8.Query.Limit
300import Rel8.Query.List
301import Rel8.Query.Maybe
302import Rel8.Query.Null
303import Rel8.Query.Order
304import Rel8.Query.SQL (showQuery)
305import Rel8.Query.Set
306import Rel8.Query.These
307import Rel8.Query.Values
308import Rel8.Schema.Context.Label
309import Rel8.Schema.HTable
310import Rel8.Schema.Name
311import Rel8.Schema.Null hiding ( nullable )
312import Rel8.Schema.Result ( Result )
313import Rel8.Schema.Table
314import Rel8.Statement.Delete
315import Rel8.Statement.Insert
316import Rel8.Statement.Returning
317import Rel8.Statement.Select
318import Rel8.Statement.Update
319import Rel8.Statement.View
320import Rel8.Table
321import Rel8.Table.ADT
322import Rel8.Table.Aggregate
323import Rel8.Table.Alternative
324import Rel8.Table.Bool
325import Rel8.Table.Either
326import Rel8.Table.Eq
327import Rel8.Table.HKD
328import Rel8.Table.Insert
329import Rel8.Table.List
330import Rel8.Table.Maybe
331import Rel8.Table.Name
332import Rel8.Table.NonEmpty
333import Rel8.Table.Ord
334import Rel8.Table.Order
335import Rel8.Table.Rel8able ()
336import Rel8.Table.Serialize
337import Rel8.Table.These
338import Rel8.Type
339import Rel8.Type.Array1D
340import Rel8.Type.Composite
341import Rel8.Type.Eq
342import Rel8.Type.Enum
343import Rel8.Type.Information
344import Rel8.Type.JSONBEncoded
345import Rel8.Type.JSONEncoded
346import Rel8.Type.Monoid
347import Rel8.Type.Num
348import Rel8.Type.Ord
349import Rel8.Type.ReadShow
350import Rel8.Type.Semigroup
351import Rel8.Type.String
352import Rel8.Type.Sum