on 7c5422f help sign in
rel8/src/Rel8.hs
369 lines 6.9 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
36 , HADT
37 , HEither
38 , HMaybe
39 , HList
40 , HNonEmpty
41 , HThese
42 , Lift
44 , Table(..)
45 , HTable
46 , Recontextualize
47 , AltTable((<|>:))
48 , AlternativeTable( emptyTable )
49 , EqTable, (==:), (/=:)
50 , OrdTable, ascTable, descTable
51 , lit
52 , bool
53 , case_
55 -- ** @MaybeTable@
56 , MaybeTable
57 , maybeTable, ($?), nothingTable, justTable
58 , isNothingTable, isJustTable
59 , optional
60 , catMaybeTable
61 , traverseMaybeTable
62 , aggregateMaybeTable
63 , nameMaybeTable
65 -- ** @EitherTable@
66 , EitherTable
67 , eitherTable, leftTable, rightTable
68 , isLeftTable, isRightTable
69 , keepLeftTable
70 , keepRightTable
71 , bitraverseEitherTable
72 , aggregateEitherTable
73 , nameEitherTable
75 -- ** @TheseTable@
76 , TheseTable
77 , theseTable, thisTable, thatTable, thoseTable
78 , isThisTable, isThatTable, isThoseTable
79 , hasHereTable, hasThereTable
80 , justHereTable, justThereTable
81 , alignBy
82 , keepHereTable, loseHereTable
83 , keepThereTable, loseThereTable
84 , keepThisTable, loseThisTable
85 , keepThatTable, loseThatTable
86 , keepThoseTable, loseThoseTable
87 , bitraverseTheseTable
88 , aggregateTheseTable
89 , nameTheseTable
91 -- ** @ListTable@
92 , ListTable
93 , listTable
94 , nameListTable
95 , many
96 , manyExpr
97 , catListTable
98 , catList
100 -- ** @NonEmptyTable@
101 , NonEmptyTable
102 , nonEmptyTable
103 , nameNonEmptyTable
104 , some
105 , someExpr
106 , catNonEmptyTable
107 , catNonEmpty
109 -- ** @ADT@
110 , ADT, ADTable
111 , BuildADT, buildADT
112 , ConstructADT, constructADT
113 , DeconstructADT, deconstructADT
114 , NameADT, nameADT
115 , AggregateADT, aggregateADT
117 -- ** @HKD@
118 , HKD, HKDable
119 , BuildHKD, buildHKD
120 , ConstructHKD, constructHKD
121 , DeconstructHKD, deconstructHKD
122 , NameHKD, nameHKD
123 , AggregateHKD, aggregateHKD
125 -- ** Table schemas
126 , TableSchema(..)
127 , Name
128 , namesFromLabels
129 , namesFromLabelsWith
131 -- * Expressions
132 , Expr
133 , Sql
134 , litExpr
135 , unsafeCastExpr
136 , unsafeLiteral
138 -- ** @null@
139 , NotNull
140 , Nullable
141 , null
142 , nullify
143 , nullable
144 , isNull
145 , isNonNull
146 , mapNull
147 , liftOpNull
148 , catNull
149 , coalesce
151 -- ** Boolean operations
152 , DBEq
153 , true, false, not_
154 , (&&.), and_
155 , (||.), or_
156 , (==.), (/=.), (==?), (/=?)
157 , in_
158 , boolExpr, caseExpr
160 -- ** Ordering
161 , DBOrd
162 , (<.), (<=.), (>.), (>=.)
163 , (<?), (<=?), (>?), (>=?)
164 , leastExpr, greatestExpr
166 -- ** Functions
167 , Function
168 , function
169 , nullaryFunction
170 , binaryOperator
172 -- * Queries
173 , Query
174 , showQuery
176 -- ** Selecting rows
177 , Selects
178 , each
179 , values
181 -- ** Filtering
182 , filter
183 , where_
184 , present
185 , absent
186 , distinct
187 , distinctOn
188 , distinctOnBy
190 -- ** @LIMIT@/@OFFSET@
191 , limit
192 , offset
194 -- ** @UNION@
195 , union
196 , unionAll
198 -- ** @INTERSECT@
199 , intersect
200 , intersectAll
202 -- ** @EXCEPT@
203 , except
204 , exceptAll
206 -- ** @EXISTS@
207 , exists
208 , with
209 , withBy
210 , without
211 , withoutBy
213 -- ** Aggregation
214 , Aggregate
215 , Aggregates
216 , aggregate
217 , countRows
218 , groupBy
219 , listAgg, listAggExpr
220 , nonEmptyAgg, nonEmptyAggExpr
221 , DBMax, max
222 , DBMin, min
223 , DBSum, sum, sumWhere
224 , DBString, stringAgg
225 , count
226 , countStar
227 , countDistinct
228 , countWhere
229 , and
230 , or
232 -- ** Ordering
233 , orderBy
234 , Order
235 , asc
236 , desc
237 , nullsFirst
238 , nullsLast
240 -- * IO
241 , Serializable
242 , ToExprs
243 , Result
245 -- * Running statements
246 -- $running
248 -- ** @SELECT@
249 , select
251 -- ** @INSERT@
252 , Insert(..)
253 , OnConflict(..)
254 , insert
255 , unsafeDefault
257 -- ** @DELETE@
258 , Delete(..)
259 , delete
261 -- ** @UPDATE@
262 , Update(..)
263 , update
265 -- ** @.. RETURNING@
266 , Returning(..)
268 -- ** @CREATE VIEW@
269 , createView
271 -- ** Sequences
272 , nextval
273 , evaluate
274 ) where
276-- base
277import Prelude ()
279-- rel8
280import Rel8.Aggregate
281import Rel8.Column
282import Rel8.Column.ADT
283import Rel8.Column.Either
284import Rel8.Column.Lift
285import Rel8.Column.List
286import Rel8.Column.Maybe
287import Rel8.Column.NonEmpty
288import Rel8.Column.These
289import Rel8.Expr
290import Rel8.Expr.Aggregate
291import Rel8.Expr.Bool
292import Rel8.Expr.Default
293import Rel8.Expr.Eq
294import Rel8.Expr.Function
295import Rel8.Expr.Null
296import Rel8.Expr.Opaleye (unsafeCastExpr, unsafeLiteral)
297import Rel8.Expr.Ord
298import Rel8.Expr.Order
299import Rel8.Expr.Serialize
300import Rel8.Expr.Sequence
301import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
302import Rel8.Order
303import Rel8.Query
304import Rel8.Query.Aggregate
305import Rel8.Query.Distinct
306import Rel8.Query.Each
307import Rel8.Query.Either
308import Rel8.Query.Evaluate
309import Rel8.Query.Exists
310import Rel8.Query.Filter
311import Rel8.Query.Limit
312import Rel8.Query.List
313import Rel8.Query.Maybe
314import Rel8.Query.Null
315import Rel8.Query.Order
316import Rel8.Query.SQL (showQuery)
317import Rel8.Query.Set
318import Rel8.Query.These
319import Rel8.Query.Values
320import Rel8.Schema.HTable
321import Rel8.Schema.Name
322import Rel8.Schema.Null hiding ( nullable )
323import Rel8.Schema.Result ( Result )
324import Rel8.Schema.Table
325import Rel8.Statement.Delete
326import Rel8.Statement.Insert
327import Rel8.Statement.Returning
328import Rel8.Statement.Select
329import Rel8.Statement.Update
330import Rel8.Statement.View
331import Rel8.Table
332import Rel8.Table.ADT
333import Rel8.Table.Aggregate
334import Rel8.Table.Alternative
335import Rel8.Table.Bool
336import Rel8.Table.Either
337import Rel8.Table.Eq
338import Rel8.Table.HKD
339import Rel8.Table.List
340import Rel8.Table.Maybe
341import Rel8.Table.Name
342import Rel8.Table.NonEmpty
343import Rel8.Table.Ord
344import Rel8.Table.Order
345import Rel8.Table.Recontextualize
346import Rel8.Table.Rel8able ()
347import Rel8.Table.Serialize
348import Rel8.Table.These
349import Rel8.Type
350import Rel8.Type.Composite
351import Rel8.Type.Eq
352import Rel8.Type.Enum
353import Rel8.Type.Information
354import Rel8.Type.JSONBEncoded
355import Rel8.Type.JSONEncoded
356import Rel8.Type.Monoid
357import Rel8.Type.Num
358import Rel8.Type.Ord
359import Rel8.Type.ReadShow
360import Rel8.Type.Semigroup
361import Rel8.Type.String
362import Rel8.Type.Sum
365-- $running
366-- To run queries and otherwise interact with a PostgreSQL database, Rel8
367-- provides 'select', 'insert', 'update' and 'delete' functions. Note that
368-- 'insert', 'update' and 'delete' will generally need the
369-- `DuplicateRecordFields` language extension enabled.